$(document).ready(function () {

    var admin = {
        // 封装相关常量
        constant: {
            GET: "GET",
            POST: "POST",
            dataType: "json",
            contentType: "application/json",
            pageSize: 17,
            wholePageNum: 1
        },
        // 封装Admin相关ajax的url
        URL: {
            page: function (pageNum) {
                return $.contextPath() + "/admin/" + pageNum + "/" + admin.constant.pageSize;
            },
            del: function () {
                return $.contextPath() + "/admin/delete";
            },
            find: function (id) {
                return $.contextPath() + "/admin/" + id;
            },
            findAllRole: function () {
                return $.contextPath() + "/role/all";
            },
            getAdminRole: function (adminId) {
                return $.contextPath() + "/admin/getAdminRole/" + adminId;
            },
            addRole: function () {
                return $.contextPath() + "/admin/addRole";
            }
        },
        // 插件相关设置
        setPluginsInfo: {
            // 设置分页插件总页数
            setTotalPages: function (totalPages) {
                $('#pagination').jqPaginator('option', {
                    totalPages: totalPages
                });
            },
            // 设置分页插件分页信息
            setPageInfo: function (total, pageNum, pageSize) {
                $('#pageInfo').html("共 " + total + " 条数据 当前第 " + pageNum + " 页  每页显示 " + pageSize + " 条");
            },
            // 设置CheckBox样式
            setCheckboxClass: function () {
                $('input[type="checkbox"]').iCheck({
                    checkboxClass: 'icheckbox_square-blue',
                    radioClass: 'iradio_square-blue',
                    increaseArea: '20%'
                });
            },
            // 开启CheckBox全选反选
            openCheckboxSelect: function (checkAllID, checkBoxName) {
                // 全选
                $('#' + checkAllID + '').on('ifChecked', function (event) {
                    $("input[name='" + checkBoxName + "']:checkbox").each(function () {
                        $(this).iCheck('check');
                    });
                });
                // 反选
                $('#' + checkAllID + '').on('ifUnchecked', function (event) {
                    $("input[name='" + checkBoxName + "']:checkbox").each(function () {
                        $(this).iCheck('uncheck');
                    });
                });
            }
        },
        // 工具相关
        util: {
            toJsonString: function (param) {
                return JSON.stringify(param);
            },
            verifyNull: function (param) {
                if (param) {
                    return param;
                } else {
                    return "";
                }
            }
        }
    };

    /*****************************************************权限相关************************************************************************/
    var hasEdit = false;
    var hasDelete = false;
    var hasAddRole = false;
    var permission = {
        verify: {
            auth: function (permission) {
                var param = {'permission': permission};
                $.ajax({
                    async: false,
                    type: admin.constant.POST,
                    url: $.contextPath() + "/admin/hasPermission",
                    dataType: admin.constant.dataType,
                    data: admin.util.toJsonString(param),
                    contentType: admin.constant.contentType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                // 填充数据
                                var datas = responseData.data;
                                if (datas) {
                                    hasEdit = datas[0];
                                    hasDelete = datas[1];
                                    hasAddRole = datas[2];
                                }
                            } else {
                                swal("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        sweetAlert("异常提示", "验证权限出现异常，请稍后再试！", "error");
                    }
                });
            }
        }
    };
    // 基于页面调用，判断用户是否有下方执行权限
    verifyHasAdminPermission = function () {
        var permissions = ["admin:edit", "admin:delete", "admin:addRole"];
        permission.verify.auth(permissions);
    }
    /*****************************************************权限相关************************************************************************/

    /****************************************************获取分页数据***************************start*************************************/
    var adminPage = {
        page: {
            // 分页获取用户列表数据
            getPage: function (pageNum) {
                $.ajax({
                    type: admin.constant.GET,
                    url: admin.URL.page(pageNum),
                    dataType: admin.constant.dataType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                var data = responseData.data;
                                // 设置页码信息等
                                admin.setPluginsInfo.setTotalPages(data.pages);
                                // 设置分页信息
                                admin.setPluginsInfo.setPageInfo(data.total, data.pageNum, data.pageSize);
                                // 填充数据
                                adminPage.page.fullData(data.list);
                                // 设置CheckBox样式
                                admin.setPluginsInfo.setCheckboxClass();
                                // 开启CheckBox全选反选
                                admin.setPluginsInfo.openCheckboxSelect("chkAll", "chkList");
                            } else {
                                console.log(data);
                                sweetAlert("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        console.log(data);
                        sweetAlert("异常提示", "获取分页数据出现异常，请稍后再试！", "error");
                    }
                });
            },
            // 填充用户列表数据
            fullData: function (list) {
                var tbody = $('<tbody></tbody>');
                $(list).each(function (index, data) {
                    var tr = $('<tr></tr>');
                    var td = '<td class="t_c"><input type="checkbox" value="' + data.id + '" name="chkList"></td>';
                    td += '<td class="t_c">' + data.id + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.userName) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.cellphone) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.email) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.name) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.nickName) + '</td>';
                    td += '<td class="t_c"><img src="' + admin.util.verifyNull(data.photo) + '"></td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.gender) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.state) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.loginCount) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.remark) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.lastActivity) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.createDate) + '</td>';
                    td += '<td class="t_c"><div class="visible-md visible-lg hidden-sm hidden-xs action-buttons">';
                    if (hasEdit) {
                        td += '<a class="green" href="#" data-toggle="modal" data-target="#editAdmin" data-whatever="' + data.id + '"> <i class="icon-pencil bigger-130"></i></a>';
                    }
                    if (hasDelete) {
                        td += '<a class="red" href="#" onclick="deleteData(' + data.id + ')"> <i class="icon-trash bigger-130"></i></a>';
                    }
                    if (hasAddRole) {
                        td += '<a class="green" href="#" data-toggle="modal" data-target="#roleAssignment" data-whatever="' + data.id + '"> <i class="glyphicon glyphicon-heart"></i></a>';
                    }
                    td += '</div></td>';
                    tr.append(td);
                    tbody.append(tr);
                });
                $('#pageInfoData tbody').replaceWith(tbody);
            }
        }
    };
    // 基于页面调用的分页方法
    page = function (pageNum) {
        adminPage.page.getPage(pageNum);
        admin.constant.wholePageNum = pageNum;
    }
    /****************************************************获取分页数据***************************end*************************************/


    /****************************************************删除数据***************************start*************************************/
    var adminDelete = {
        delData: {
            // 验证删除数据是否合法
            verifyDeleteData: function (id) {
                var selectedItems = [];
                if (id) {
                    selectedItems.push(id);
                } else {
                    // 获取checkbox选择的数据项
                    $("input[name='chkList']:checkbox").each(function () {
                        if (true == $(this).is(':checked')) {
                            selectedItems.push($(this).val());
                        }
                    });
                }
                if (null == selectedItems || selectedItems.length < 1) {
                    swal({
                        title: "友情提示",
                        text: "请选择您要删除的数据，可以批量删除 ！",
                        timer: 2000
                    });
                    return;
                }
                return selectedItems;
            },
            // 确实删除方法
            submitDeleteData: function (items) {
                swal({
                        title: "确认删除?",
                        text: "删除数据不可恢复，请谨慎操作！",
                        type: "warning",
                        showCancelButton: true,
                        confirmButtonColor: "#DD6B55",
                        confirmButtonText: "Yes, delete it!",
                        closeOnConfirm: false
                    },
                    function () {
                        adminDelete.delData.executeDeleteData(items);
                    });
            },
            // 执行删除方法
            executeDeleteData: function (items) {
                var param = {'ids': items};
                $.ajax({
                    type: admin.constant.POST,
                    url: admin.URL.del(),
                    dataType: admin.constant.dataType,
                    data: admin.util.toJsonString(param),
                    contentType: admin.constant.contentType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                // 填充数据
                                page(admin.constant.wholePageNum);
                                swal("友情提示", "数据删除成功!", "success");
                            } else {
                                swal("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        sweetAlert("异常提示", "删除数据出现异常，请稍后再试！", "error");
                    }
                });
            }
        }
    };
    // 基于页面调用的删除方法
    deleteData = function (id) {
        var items = adminDelete.delData.verifyDeleteData(id);
        if (items) {
            adminDelete.delData.submitDeleteData(items)
        }
    }
    /****************************************************删除数据***************************end*************************************/


    /****************************************************新增数据***************************start*************************************/
        // 新增弹出层后事件
    $('#addAdmin').on('show.bs.modal', function (event) {
        var button = $(event.relatedTarget); // 触发事件的按钮
    });
    // 提交新增表单数据
    $('#addAdminForm').on("submit", function () {
        $(this).find("*").each(function () {
            var elem = $(this);
            if (elem.prop("name") != null && elem.prop("name") != "" && elem.prop("name") == "pswd") {
                var passwd = elem.val();
                if (passwd) {
                    elem.val($.md5(passwd));
                }
            }
            if (elem.prop("name") != null && elem.prop("name") != "") {
                if (elem.val() == "") {
                    elem.removeAttr("name");
                }
            }
        });
        $(this).ajaxSubmit(
            {
                dataType: "json",
                clearForm: true,
                //提交成功后的回调函数
                success: function (data, status, xhr, $form) {
                    console.log("success", data, status, xhr, $form);
                    if (status == 'success' && data.code == 200) {
                        swal("友情提示", "数据添加成功!", "success");
                        $('#addAdmin').modal('hide');// 隐藏弹出层
                        page(1);
                    }
                },
                // 提交错误后的回调函数
                error: function (xhr, status, error, $form) {
                    sweetAlert("异常提示", "添加数据出现异常，请稍后再试！", "error");
                }
            }
        );
        return false; //阻止表单默认提交
    });
    /****************************************************新增数据***************************end*************************************/


    /****************************************************修改数据***************************start*************************************/
    var adminEdit = {
        find: {
            // 查询当前修改对象
            findAdmin: function (id) {
                $.ajax({
                    type: admin.constant.GET,
                    url: admin.URL.find(id),
                    dataType: admin.constant.dataType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                // 填充数据
                                adminEdit.find.fullEditData(responseData.data);
                            } else {
                                swal("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        console.log(data);
                        sweetAlert("异常提示", "获取当前修改对象出现异常，请稍后再试！", "error");
                    }
                });
            },
            // 填充修改表单数据
            fullEditData: function (data) {
                $("#edit_id").val(data.id);
                $("#edit_userName").val(data.userName);
                $("#edit_cellphone").val(data.cellphone);
                $("#edit_email").val(data.email);
                $("#edit_name").val(data.name);
                $("#edit_nickName").val(data.nickName);
                if (data.state && data.state != "unActivity") {
                    $("#edit_state").val(data.state);
                }
                $("#edit_remark").val(data.remark);
            }
        }
    };
    // 修改弹出层后事件
    $('#editAdmin').on('show.bs.modal', function (event) {
        var button = $(event.relatedTarget); // 触发事件的按钮
        var id = button.data('whatever'); // 解析出data-whatever内容，用来传输数据
        adminEdit.find.findAdmin(id);//获得的数据
    });
    // 提交修改表单数据
    $('#editAdminForm').on("submit", function () {
        $(this).find("*").each(function () {
            var elem = $(this);
            if (elem.prop("name") != null && elem.prop("name") != "" && elem.prop("name") == "pswd") {
                var passwd = elem.val();
                if (passwd) {
                    elem.val($.md5(passwd));
                }
            }
            if (elem.prop("name") != null && elem.prop("name") != "") {
                if (elem.val() == "") {
                    elem.removeAttr("name");
                }
            }
        });
        $(this).ajaxSubmit(
            {
                dataType: "json",
                clearForm: true,
                //提交成功后的回调函数
                success: function (data, status, xhr, $form) {
                    console.log("success", data, status, xhr, $form);
                    if (status == 'success' && data.code == 200) {
                        swal("友情提示", "数据修改成功!", "success");
                        $('#editAdmin').modal('hide');// 隐藏弹出层
                        page(1);
                    }
                },
                // 提交错误后的回调函数
                error: function (xhr, status, error, $form) {
                    sweetAlert("异常提示", "修改当前数据出现异常，请稍后再试！", "error");
                }
            }
        );
        return false; //阻止表单默认提交
    });
    /****************************************************修改数据***************************end*************************************/


    /****************************************************角色分配***************************start*************************************/
    var adminAddRole = {
        find: {
            // 获取角色列表
            findRoles: function () {
                $.ajax({
                    type: admin.constant.GET,
                    url: admin.URL.findAllRole(),
                    dataType: admin.constant.dataType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                // 填充角色列表数据
                                adminAddRole.find.fullRoleData(responseData.data);
                                // 设置CheckBox样式
                                admin.setPluginsInfo.setCheckboxClass();
                                // 开启CheckBox全选反选
                                admin.setPluginsInfo.openCheckboxSelect("assChkAll", "assChkList");
                                // 勾选已经拥有的角色
                                adminAddRole.find.selectHasRole();
                            } else {
                                sweetAlert("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        console.log(data);
                        sweetAlert("异常提示", "获取角色分页出现异常，请稍后再试！", "error");
                    }
                });
            },
            // 填充角色列表数据
            fullRoleData: function (list) {
                var tbody = $('<tbody></tbody>');
                $(list).each(function (index, data) {
                    var tr = $('<tr></tr>');
                    var td = '<td class="t_c"><input type="checkbox" value="' + data.id + '" name="assChkList"></td>';
                    td += '<td class="t_c">' + data.id + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.name) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.aliases) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.enName) + '</td>';
                    td += '<td class="t_c">' + admin.util.verifyNull(data.remark) + '</td>';
                    tr.append(td);
                    tbody.append(tr);
                });
                $('#pageInfoRoleAssData tbody').replaceWith(tbody);
            },
            // 勾选已经拥有的角色
            selectHasRole: function () {
                $.ajax({
                    type: admin.constant.GET,
                    url: admin.URL.getAdminRole($("#role_ass_admin_id").val()),
                    dataType: admin.constant.dataType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                // 填充化角色列表数据
                                var hasRoles = responseData.data;
                                if (hasRoles) {
                                    var roles = hasRoles.roles;
                                    $("input[name='assChkList']:checkbox").each(function () {
                                        var assChk = $(this);
                                        $(roles).each(function (index, role) {
                                            if (role.id == assChk.val()) {
                                                assChk.iCheck('check');
                                            }
                                        });
                                    });
                                }
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        console.log(data);
                        sweetAlert("异常提示", "获取用户已用角色数据出现异常，请稍后再试！", "error");
                    }
                });
            }
        },
        add: {
            // 验证分配角色的参数
            verifyAddRoleData: function () {
                var selectedItems = [];
                // 获取checkbox选择的数据项
                $("input[name='assChkList']:checkbox").each(function () {
                    if (true == $(this).is(':checked')) {
                        selectedItems.push($(this).val());
                    }
                });
                return selectedItems;
            },
            // 添加角色
            addRole: function (items) {
                var param = {'roleIds': items, "adminId": $("#role_ass_admin_id").val()};
                $.ajax({
                    type: admin.constant.POST,
                    url: admin.URL.addRole(),
                    dataType: admin.constant.dataType,
                    data: admin.util.toJsonString(param),
                    contentType: admin.constant.contentType,
                    success: function (responseData) {
                        if (responseData) {
                            if (responseData.code == 200) {
                                swal("友情提示", "角色分配成功!", "success");
                                page(admin.constant.wholePageNum);
                                $('#roleAssignment').modal('hide');// 隐藏弹出层
                            } else {
                                swal("友情提示", responseData.msg);
                            }
                        } else {
                            sweetAlert("异常提示", "返回数据为[null、undefined、NaN]!");
                        }
                    },
                    error: function (data) {
                        sweetAlert("异常提示", "角色分配失败，请稍后再试！", "error");
                    }
                });
            }
        }
    };
    // 角色分配弹出层后事件
    $('#roleAssignment').on('show.bs.modal', function (event) {
        var button = $(event.relatedTarget); // 触发事件的按钮
        var adminId = button.data('whatever'); // 解析出data-whatever内容，用来传输数据
        $("#role_ass_admin_id").val(adminId);
        adminAddRole.find.findRoles(); // 初始化角色列表
    });
    // 页面添加方法
    addRole = function () {
        var items = adminAddRole.add.verifyAddRoleData();
        adminAddRole.add.addRole(items);
    }
    /****************************************************角色分配***************************end*************************************/
});